package NewCharacter;

import java.util.Random;
import java.util.function.Consumer;
import java.util.function.Function;
import java.util.function.Supplier;

public class Demo4_MethodReference {

    /**
     * 1.使用对象名引用普通方法
     */
    public void objectMethod(){

        //使用lambda表达式创建Consumer对象
        Consumer<Integer> consumer = num -> System.out.println(num);
        //使用对象引用普通方法实现 传什么参数就输出什么参数
        Consumer<Integer> consumer1 = System.out::println;

        //使用lambda表达式创建Supplier对象
        Supplier<Integer> supplier = () -> new Random().nextInt();
        //使用对象引用普通方法实现 执行一次返回一个int类型的随机数
        Supplier<Integer> supplier1 = new Random()::nextInt;

    }


    /**
     * 2.使用类名引用静态方法
     */
    public void classStaticMethod(){

        //使用lambda表达式创建Function对象
        Function<Integer,String> function = i -> String.valueOf(i);

        //使用类名应用静态方法的形式创建Function对象，把每一个输入的数字都转成字符串
        Function<Integer,String> function1 = String::valueOf;

    }

    /**
     * 3.使用类名引用实例方法
     */
    public void classMethod(){

        Function<String,Integer> function = str -> str.length();

        Function<String,Integer> function1 = String::length;

    }

    /**
     * 4.使用类名::new 引用当前类的构造方法
     */
    public void constructorMethod(){

        Function<String,Student> function = str -> new Student(str);

        Function<String,Student> function1 = Student::new;

        System.out.println(function1.apply("tom"));


    }

    public static void main(String[] args) {
        new Demo4_MethodReference().constructorMethod();
    }

}

class Student{

    private String name;

    public Student(String name) {
        this.name = name;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    @Override
    public String toString() {
        return "Student{" +
                "name='" + name + '\'' +
                '}';
    }
}



